package com.atguigu.gulimall.product.excelUtils;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @Auther zhaolei
 * @Date 2022-06-07 下午10:26
 */
public class ExcelUtils {

    public static List<Detailed> excelToShopIdList(InputStream inputStream) throws IOException {
        HSSFWorkbook workbook = new HSSFWorkbook(inputStream);   //xls

        // 在工作簿获取目标工作表
        Sheet sheet = workbook.getSheetAt(0);
        // 获取到最后一行
        int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
        // 该集合用来储存行对象
        ArrayList<Detailed> detaileds = new ArrayList<>();


        //获取日期的列名（9月1日，9月2日等）
        Row firtRow = sheet.getRow(0);
        int v =0;
        Iterator<Cell> iterator = firtRow.iterator();
        ArrayList<String> dateList = new ArrayList<>();
        while (iterator.hasNext()){
            Cell cell = iterator.next();
            v++;
            if (cell==null){
                continue;
            }
            if (v>3){
                String s = String.valueOf(cell);
                dateList.add(s);
            }
        }

        List<String> changeDateList = dateList.stream().map(vSplit -> {
            String replace = vSplit.replace("一月", "01")
                    .replace("二月", "02")
                    .replace("三月", "03")
                    .replace("四月", "04")
                    .replace("五月", "05")
                    .replace("六月", "06")
                    .replace("七月", "07")
                    .replace("八月", "08")
                    .replace("九月", "09")
                    .replace("十月", "10")
                    .replace("十一月", "11")
                    .replace("十二月", "12")
                    .replace("-", "/");

            return replace;
        }).collect(Collectors.toList());

        List<String> collect = changeDateList.stream().map(vFormat -> {
            return DateToString(vFormat);
        }).collect(Collectors.toList());


        // 遍历整张表，从第二行开始，第一行的表头不要，循环次数不大于最后一行的值
        for (int i = 1; i < physicalNumberOfRows; i++) {
            // 获取行数据
            Row row = sheet.getRow(i);

            //获取总列数
            int cells = sheet.getRow(0).getPhysicalNumberOfCells() ;

            //计数器（从固定列后的第一个日期开始计数，是为了匹配dateList的大小，计数器有多少个，dateList里的日期数据就有多少个。。。   每一个行对应的日期值就是dateList里的日期值，）
            int j =0;
            //前三行固定匹配，后面根据列数生成行数
            for (int i1 = 3; i1 < cells; i1++) {
                // 该对象用来储存行数据
                Detailed detailed = new Detailed();

                detailed.setName(row.getCell(0).getStringCellValue());

                row.getCell(1).setCellType(CellType.STRING);
                detailed.setIdCard(row.getCell(1).getStringCellValue());
                detailed.setPmname(row.getCell(2).getStringCellValue());

                //每天
                for (int i2 = 0; i2 < collect.size(); i2++) {
                    if (i2==j){
                        detailed.setDate(collect.get(i2));
                    }
                }
                //每天的内容
                row.getCell(i1).setCellType(CellType.STRING);
                detailed.setTextContent(row.getCell(i1).getStringCellValue());

                // 把对象放到集合里
                detaileds.add(detailed);
                j++;
            }
        }

        detaileds.stream().forEach(v1->{
            System.out.println(v1);
        });
        return detaileds;
    }


    /**
     * 以下两个方法是将 dd/mm/yyyy 的格式转换成 yyyy-MM-dd
     * @param dateValue
     * @return
     */
    public static Date getddMMyyyyHHmmssDateByString(String dateValue) {
        DateFormat  ddMMyyyyHHmmssFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date date = null;
        try {
            date = ddMMyyyyHHmmssFormat.parse(dateValue);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    public static String DateToString(String dateValue){
        DateFormat yyyyMMddHHmmss=new SimpleDateFormat("yyyy-MM-dd");
        String strDate = "";
        if(dateValue==null){
            strDate = null;
        }else{
            Date d = getddMMyyyyHHmmssDateByString(dateValue);
            strDate = yyyyMMddHHmmss.format(d);
        }
        return strDate;
    }
}
